package com.yanyuan.algorithm.leetcode;


import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;

/**
 * @Description 牛客热门题目
 * @Author yanyuan
 * @Date 22:32 2020/11/26
 * @Version 1.0
 **/
@Slf4j
public class Hot {

    /**
     * 给定一个整数数组 nums 和一个目标值 target，请你在该数组中找出和为目标值的那 两个 整数，并返回他们的数组下标。
     * <p>
     * 你可以假设每种输入只会对应一个答案。但是，数组中同一个元素不能使用两遍。
     * <p>
     *  
     * <p>
     * 示例:
     * <p>
     * 给定 nums = [2, 7, 11, 15], target = 9
     * <p>
     * 因为 nums[0] + nums[1] = 2 + 7 = 9
     * 所以返回 [0, 1]
     *
     * @param nums
     * @param target
     * @return
     */
    public int[] twoSum(int[] nums, int target) {
        int[] array = null;
        int n = nums.length;
        int count = 0;
        for (int i = 0; i < n - 1; i++) {
            for (int j = i + 1; j < n; j++) {
                count++;
                System.out.println(" 计算次数 " + count + ", i = " + nums[i] + ", j=" + nums[j]);
                if (nums[i] + nums[j] == target) {
                    System.out.println(" i + j = target " + i + j + target);
                    return new int[]{i, j};
                }
            }
        }
        return array;
    }

    /**
     * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
     * <p>
     * 示例:
     * <p>
     * 输入: [0,1,0,3,12]
     * 输出: [1,3,12,0,0]
     * 说明:
     * <p>
     * 必须在原数组上操作，不能拷贝额外的数组。
     * 尽量减少操作次数。
     *
     * @param nums
     */
    public void moveZeroes(int[] nums) {
        for (int i = 0; i < nums.length - 1; i++) {
            if (nums[i] != 0) {
                continue;
            }
            int temp = nums[i];
            for (int j = i; j < nums.length - 1; j++) {
                nums[j] = nums[j + 1];
            }
            nums[nums.length - 1] = temp;
        }
        ;
        log.info(JSONObject.toJSONString(nums));
    }

    public static void main(String[] args) {
        Hot hot = new Hot();
        //hot.twoSum(new int[]{1,2,4,5,6,7,8,9}, 50);
        hot.moveZeroes(new int[]{0, 0, 1});
    }
}
